#ifndef __CLCONTROLLER_H__
#define __CLCONTROLLER_H__

#include "Controller.hpp"
#include <cstdlib>



/** \class CLController
 *  \brief Implementazione di un semplice controller testuale per l'evoluzione di filtri per immagini b/w
 *
 *  Questo controller semplicemente legge dal file di configurazione delle semplici impostazioni (ogni quanto effettuare lo "snap" del processo
 *  evolutivo, dopo quante generazioni fermare l'evoluzione...) e semplicemente continua a iterare il processo evolutivo fino a che non si trova
 *  un individuo completamente evoluto o non si raggiunge il limite di generazioni.
 */

class CLController : public Controller
{
    //! Specifica il numero di generazioni che intercorrono tra uno "snap" e l'altro
    int snap_interval;

    //! Massimo numero di generazioni
    int max_generations;

	int max_no_progress;

    //! Se 1 ogni snap comprende la rappresentazione del miglio individuo e tutte le immagini in uscita
    int complete_snap;

    public:

    /** Costruttore ridefinito. Legge i parametri e configura le variabili interne.
     *
     *  I parametri che possono essere specificati sono:
     *  \arg \c snap_interval : specifica lo snap interval
     *  \arg \c max_generations : imposta il numero massimo di generazioni
     *  \arg \c complete_snap : [0-1] specifica se eseguire lo snap completo
     */
    CLController(GAcore *gc, GAmodSettings &settings) throw (ControllerException);

    //! Avvia l'esecuzione del framework
    void start_execution() throw (ControllerException);
};

#endif

